package com.ctshk.rpc.workflow.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.workflow.dto.*;
import com.ctshk.rpc.workflow.req.ApprovalReq;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 审批 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-25
 */
public interface ISysApprovalService {

    /**
     * 发起业务审批
     * @param businessTypeId    业务类型id-SystemBusinessType枚举code(必填)
     * @param approvalTypeId    审批类型id-ApprovalType枚举code(必填)
     * @param businessId        相关业务id(必填)
     * @param userId            审批发起人id(必填)
     * @param amount            业务所需审批价格(非必填)
     * @param extendParams      业务所需自定义额外json参数(非必填)
     * @return
     */
    Result<ApprovalStartDTO> start(long businessTypeId, long approvalTypeId, long businessId, long userId, BigDecimal amount, String extendParams);

    /**
     * 发起业务审批-动态设置审批人
     * @param businessTypeId    业务类型id-SystemBusinessType枚举code(必填)
     * @param approvalTypeId    审批类型id-ApprovalType枚举code(必填)
     * @param businessId        相关业务id(必填)
     * @param userId            审批发起人id(必填)
     * @param amount            业务所需审批价格(非必填)
     * @param extendParams      业务所需自定义额外json参数(非必填)
     * @param approverIds       动态审批人ids(必填-填入此参数将会动态修改审批人)
     * @return
     */
    Result<ApprovalStartDTO> start(long businessTypeId, long approvalTypeId, long businessId, long userId, BigDecimal amount, String extendParams, List<Long> approverIds);

    /**
     * 业务审批
     * @param approvalId    审批id(必填)
     * @param userId        审批人id(必填)
     * @param status        状态-ApprovalStatus枚举code 0 撤回 3 审批不通过 4 审批通过(必填)
     * @param comments      通过或拒绝评论说明(非必填)
     * @return
     */
    Result<ApprovalCheckDTO> check(long approvalId, long userId, int status, String comments);

    /**
     * 获取审批中心列表
     * @param req
     * @return
     */
    PageResponse<ApprovalDTO> queryPage(ApprovalReq req, long userId);

    /**
     * 审批详情
     * @param id        审批id
     * @param userId    当前用户id
     * @return
     */
    ApprovalInfoDTO query(long id, long userId);

    /**
     * 操作审批
     * @param id        审批id
     * @param status    审批状态(0 撤回 3 审批不通过 4 审批通过)
     * @param userId    当前用户id
     * @param comments  通过或拒绝评论说明(非必填)
     */
    void approval(long id, int status, long userId, String comments);

    /**
     * 查询业务类型与审批类型,两级联动,对应关系查看文档：https://docs.qq.com/sheet/DYXdDdmxHaGFqRmxh?tab=BB08J2
     * @return
     */
    List<BusinessTypeEnumDTO> queryEnum();
}
